﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SILAS.Entidades;
using PagedList;


namespace SILAS.DAO
{
    public class VisitaDAO : MasterDAO, IVisitaDAO
    {


        public PagedList.IPagedList<Visita> GetAllFromVisita(Int32 page, Int32 size)
        {
            var query = from v in context.Visitas
                        orderby v.Id
                        select v;
            return query.OrderBy(v => v.Id).ToPagedList(page, size);
        }

        public PagedList.IPagedList<Visita> GetAllFromVisitaByCriterio(string criterio, int page, int size)
        {
            throw new NotImplementedException();
        }

        public Visita getFromVisitabyId(int id)
        {
            return context.Visitas.Find(id);

        }

        public void agregarVisita(Visita visita)
        {
            context.Visitas.Add(visita);
            context.SaveChanges();
        }

        public void modificarVisita(Visita visita)
        {
            var existe = context.Visitas.Find(visita.Id);

            
            for (int i = 0; i < visita.DetalleVisitas.Count; i++)
			{
                DetalleVisita ciudadano = null;

                if (visita.DetalleVisitas[i].IdCiudadano !=null )
                {
                    ciudadano = existe.DetalleVisitas.Where(c => c.IdCiudadano.Equals(visita.DetalleVisitas[i].IdCiudadano)).SingleOrDefault();
                }

                DetalleVisita empleado = null;

                if (visita.DetalleVisitas[i].IdEmpleado !=null)
                {
                    empleado = existe.DetalleVisitas.Where(e => e.IdEmpleado.Equals(visita.DetalleVisitas[i].IdEmpleado)).SingleOrDefault();
                }            
                
                if (ciudadano == null)
                {
                    var detalle = new DetalleVisita() { IdCiudadano = visita.DetalleVisitas[i].IdCiudadano };
                    existe.DetalleVisitas.Add(detalle);
                }

                if (empleado == null)
                {
                    var detalle = new DetalleVisita() { IdEmpleado = visita.DetalleVisitas[i].IdEmpleado };
                    existe.DetalleVisitas.Add(detalle);
                }

			}


            for (int i = 0; i < existe.DetalleVisitas.Count; i++)
            {
                DetalleVisita ciudadano = null;

                if (existe.DetalleVisitas[i].IdCiudadano !=null)
                {
                    ciudadano = visita.DetalleVisitas.Where(e => e.IdCiudadano.Equals(existe.DetalleVisitas[i].IdCiudadano)).SingleOrDefault();
                }                

                if (ciudadano == null)
                {
                    var ciudExiste = existe.DetalleVisitas[i];

                    if (ciudExiste.IdEmpleado== null)
                    {
                        existe.DetalleVisitas.Remove(ciudExiste);
                    }
                    else
                    {
                        existe.DetalleVisitas[i].IdCiudadano = null;
                    }
                }
            }

            for (int j = 0; j < existe.DetalleVisitas.Count; j++)
            {
                DetalleVisita empleado = null;

                if (existe.DetalleVisitas[j].IdEmpleado!=null)
                {
                    empleado = visita.DetalleVisitas.Where(e => e.IdEmpleado.Equals(existe.DetalleVisitas[j].IdEmpleado)).SingleOrDefault();
                }
               

                if (empleado == null)
                {
                    var emplExiste = existe.DetalleVisitas[j];

                    if (emplExiste.IdCiudadano == null)
                    {
                        existe.DetalleVisitas.Remove(emplExiste);
                    }
                    else
                    {
                        existe.DetalleVisitas[j].IdEmpleado = null;
                    }
                }
            }

          
            context.Entry(existe).State = System.Data.EntityState.Modified;
            context.SaveChanges();

        }

        public void eliminarVisita(int id)
        {
            var existe = context.Visitas.Find(id);

            if (existe != null)
            {
                context.Visitas.Remove(existe);
                context.SaveChanges();
            }
        }


        public void eliminarDetalleciu(int iddeta, int idciu, int idVisi)
        {
            throw new NotImplementedException();
        }

        public void eliminarDetalleemple(int iddeta, int idemple, int idVisi)
        {
            throw new NotImplementedException();
        }
    }
}
